const allElementsString = arr => {
  return arr.every(elem => typeof elem === 'string')
}

const allElementsNumbers = arr => {
  return arr.every(elem => typeof elem === 'number')
}

const formatArray = params => {
  if (params.length <= 0) {
    params = []
  } else if (allElementsString(params) || allElementsNumbers(params)) {
    params = [...params]
  } else {
    params = params.map(val => val.id)
  }
  return params
}

const generatePayloadForObject = item => {
  if (item.params.id) {
    item.params = [item.params.id]
  } else {
    item.params = [item.params]
  }
  return item.params
}

const generatePayload = data => {
  const actions = JSON.parse(JSON.stringify(data))
  const payload = actions.map(item => {
    if (Array.isArray(item.params)) {
      item.params = formatArray(item.params)
    } else if (typeof item.params === 'object') {
      item.params = generatePayloadForObject(item)
    } else if (!item.params) {
      item.params = []
    } else {
      item.params = [item.params]
    }
    return item
  })
  return payload
}

export default generatePayload
